home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 16
/
Aminet 16 (1996)(GTI - Schatztruhe)[!][Dec 1996].iso
/
Aminet
/
comm
/
term
/
term_source.lha
/
Extras
/
Source
/
term-source.lha
/
TerminalTest.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-10-20
|
2KB
|
141 lines
/*
** TerminalTest.c
**
** Terminal emulation test routines
**
** Copyright © 1990-1996 by Olaf `Olsen' Barthel
** All Rights Reserved
**
** :ts=4
*/
#ifndef _GLOBAL_H
#include "Global.h"
#endif
STATIC BPTR TestFile;
STATIC UBYTE TestFileName[MAX_FILENAME_LENGTH];
STATIC struct MsgPort *MicroPort;
STATIC struct timerequest *MicroRequest;
STATIC BOOL UseTestDelay;
STATIC VOID
MicroCleanup(VOID)
{
if(MicroRequest)
{
if(MicroRequest->tr_node.io_Device)
CloseDevice((struct IORequest *)MicroRequest);
DeleteIORequest((struct IORequest *)MicroRequest);
MicroRequest = NULL;
}
if(MicroPort)
{
DeleteMsgPort(MicroPort);
MicroPort = NULL;
}
}
STATIC BOOL
MicroSetup(VOID)
{
if(MicroPort = CreateMsgPort())
{
if(MicroRequest = (struct timerequest *)CreateIORequest(MicroPort,sizeof(struct timerequest)))
{
if(!OpenDevice(TIMERNAME,UNIT_MICROHZ,(struct IORequest *)MicroRequest,NULL))
return(TRUE);
}
}
MicroCleanup();
return(FALSE);
}
VOID
StopTerminalTest()
{
MicroCleanup();
if(TestFile)
{
Close(TestFile);
TestFile = NULL;
}
if(MainJobQueue && TerminalTestJob)
SuspendJob(MainJobQueue,TerminalTestJob);
}
VOID
StartTerminalTest(ULONG Qualifier)
{
struct FileRequester *FileRequester;
StopTerminalTest();
if(FileRequester = OpenSingleFile(Window,"Open terminal test file",NULL,NULL,TestFileName,sizeof(TestFileName)))
{
if(TestFile = Open(TestFileName,MODE_OLDFILE))
{
if(MicroSetup())
{
if(Qualifier & IEQUALIFIER_RSHIFT)
UseTestDelay = FALSE;
else
UseTestDelay = TRUE;
ActivateJob(MainJobQueue,TerminalTestJob);
}
else
{
Close(TestFile);
TestFile = NULL;
}
}
FreeAslRequest(FileRequester);
}
}
BOOL
HandleTerminalTestJob(JobNode *UnusedJob)
{
UBYTE LocalBuffer[40];
LONG Len;
Len = Read(TestFile,LocalBuffer,sizeof(LocalBuffer));
if(Len > 0)
{
LONG i;
if(UseTestDelay)
{
for(i = 0 ; i < Len ; i++)
{
MicroRequest->tr_node.io_Command = TR_ADDREQUEST;
MicroRequest->tr_time.tv_secs = 0;
MicroRequest->tr_time.tv_micro = MILLION / 200;
DoIO((struct IORequest *)MicroRequest);
(*ConTransfer)(&LocalBuffer[i],1);
}
}
else
{
for(i = 0 ; i < Len ; i++)
(*ConTransfer)(&LocalBuffer[i],1);
}
}
else
StopTerminalTest();
return(FALSE);
}